import 'package:shared_preferences/shared_preferences.dart';
import 'dart:convert';

class CacheUtil {

  /// 私有构造函数
  CacheUtil._privateConstructor();

  /// 单例实例
  static final CacheUtil _instance = CacheUtil._privateConstructor();

  /// 获取单例实例的方法
  static CacheUtil get instance => _instance;
  SharedPreferences? _prefs;
  // 初始化 SharedPreferences 实例
  Future<void> init() async {
    _prefs ??= await SharedPreferences.getInstance();
  }


  /// 存储或更新 Map 数据
  Future<void> setMap(String key, Map<String, dynamic> value) async {
    await init();
    String jsonString = json.encode(value);
    await _prefs?.setString(key, jsonString);
  }

  /// 获取 Map 数据
  Future<Map<String, dynamic>?> getMap(String key) async {
    await init();
    String? jsonString = _prefs?.getString(key);
    if (jsonString != null) {
      return json.decode(jsonString);
    }
    return null;
  }

  /// 删除 Map 数据
  Future<void> deleteMap(String key) async {
    await init();
    await _prefs?.remove(key);
  }

  /// 存储或更新字符串数据
  Future<void> setString(String key, String value) async {
    await init();
    await _prefs?.setString(key, value);
  }

  /// 获取字符串数据
  Future<String?> getString(String key) async {
    await init();
    return _prefs?.getString(key);
  }

  /// 删除字符串数据
  Future<void> deleteString(String key) async {
    await init();
    await _prefs?.remove(key);
  }

  /// 检查键是否存在
  Future<bool> containsKey(String key) async {
    await init();
    return _prefs?.containsKey(key) ?? false;
  }
}
